import request from './request';
import JSONBigInt from 'json-bigint'
const JSONBigIntStr = JSONBigInt({storeAsString: true});
/**
 * 获取文件列表：
 * 请求地址：http://localhost:8080/file/list
 * 请求方式：GET
 * 请求参数：user
 * 
 * @param user 用户信息（用户名，地址）
 * @returns Promise对象
 */
export const reqGetFileList = (user:any)=>{
    return request({
        url: '/file/list',
        method: 'GET',
        params: user,
   
    });
}
/**
 * 下载文件：
 * 请求地址：http://localhost:8080/file/download
 * 请求方式：GET
 * 请求参数：user
 */
export const reqDownloadFile = (user:any)=>{
    return request({
        url: '/file/download',
        method: 'GET',
        params: user,
        responseType: 'blob'
    });
}
/**
 * 删除文件或目录
 * 请求地址: http://localhost:8080/file/del
 * 请求方式：DELETE
 * 请求参数：user
 */
export const reqDeleteFileOrDir = (user:any)=>{
    return request({
        url: '/file/del',
        method: 'DELETE',
        data: user
    });
}
// 创建新目录
/**
 * 请求地址：http://localhost:8080/file/dir
 * 请求方式：POST
 * 请求参数：用户名和目录名，需要  /  
 *             "userName":"cc",
"               filePath":"/我是新创建的目录"
 * @param userNameAndDirName 用户名和目录的名字
 * @returns promise对象
 */
export const reqCreateNewDirectory = (userNameAndDirName:any) => {
    return request({
        url: '/file/dir',
        method: 'POST',
        data: userNameAndDirName
    });
}
// 文件上传
/**接口地址： http://localhost:8080/file/upload
 * 请求方式： POST
 * 请求参数： userPath 用户及用户目录
 *           file 所上传的文件
 * 
 * @param user 请求参数
 * @returns 
 */
export const reqFileUpload = (user:any) => {
    return request({
        url:'/file/upload',
        method: 'POST',
        data: user
    });

}

// 用户相关的
/**
 * 登录接口
 * 地址：http://localhost:8080/user/login
 * 请求方式：POST
 * 请求参数：userName，password 
 * 
 */
export const reqUserLogin = (user:any) => {
    // console.log('duser#####',user);
    return request({
        url: '/user/login',
        method: 'POST',
        data: {
            // 防止user为null，导致报错
            userName: user?.username || '',
            password: user?.password || '' 
        }
    });
}
// 获取所有用户信息
/**
 * JSONBigIntStr
 * 请求地址：http://localhost:8080/user/list
 * 请求方式：GET
 * 请求参数：user 可有可无，有的话就是模糊查询
 * 需要携带请求头：token,这儿在请求拦截器那个携带了
 */
// 如果get请求要发送json数据的话，需要使用qs模块才行
export const reqGetAllUser = (user:any) => {
    return request({
        url: '/user/list',
        method: 'GET',
        params: user, // 如果为空，那么就传递一个空对象
        transformResponse: [(data) =>{
            // 将后端相应的数据变为字符串
            try {
                return JSONBigIntStr.parse(data);
            }catch {
                // 如果遇到了异常，那么就返回异常打印的信息
                return data;
            }
        }]
    });
}
// 新增用户
/**
 * 请求地址：http://localhost:8080/user/add
 * 请求方式：POST
 * 请求参数：userName,password 这两个必须
 *           nickName，permission,isAble非必须
 * @returns 返回一个promise
 */
export const reqAddNewUser = (user:any) => {
    return request({
        url: '/user/add',
        method: 'POST',
        data: user,
    });
}

// 删除用户
/**
 * 请求地址：http://localhost:8080/user/del
 * 请求方式：DELETE
 * 请求参数：id (用户id)
 */
export const reqDeleteUserById = (id:any)=>{
    return request({
        url: '/user/del',
        method: 'DELETE',
        params: {
            id
        }
    });
}
// 更改用户密码
/**
 * 请求地址：/user/rePwd
 * 请求方式：PUT
 * 请求参数：id,password
 * @param id 用户唯一标识
 * @param password  新密码
 * @returns promise对象
 * 
 */
export const reqUpdateUserPassword = (id:string, password:string)=>{
    return request({
        url: '/user/rePwd',
        method: 'PUT',
        data: {
            id,
            password
        }
    });
}

// 用户导入
export const reqImportUsers = (file:any) => {
    return request({
        url: '/import/user',
        method: 'POST',
        data: file
    })
}